#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>

#define MAXSIZE 50
typedef char DataType;

// 栈结构体
typedef struct Stack
{
    DataType data[MAXSIZE];
    int top;
} Stack;
// 共享栈结构体
typedef struct SharingStack
{

    DataType data[MAXSIZE];
    int top;
    int tail;
} SharingStack;
// 初始化栈
void init(Stack *stack)
{
    stack->top = -1;
}
// 初始化共享栈
void initSharing(SharingStack *stack)
{
    stack->top = -1;
    stack->tail = MAXSIZE + 1;
}
// 判断栈空
bool isEmpty(Stack *s)
{
    if (s->top = -1)
    {
        return false;
    }
    return true;
}
// 进栈push
void push(Stack *stack, DataType data)
{
    stack->top++;
    stack->data[stack->top] = data;
}
// 出栈pop
void pop(Stack *stack)
{
    stack->top--;
}
// 读栈顶
void read(Stack *stack)
{
    DataType data = stack->data[stack->top];
    printf("栈顶元素：%c\n", data);
}
// 销毁栈
void DestoryStack(Stack *s)
{
    free(s->data);
    s->top = NULL;
}
int main()
{

    Stack s;
    SharingStack ss;
    char choice;
    DataType data;
    char exit_choice;
    while (1)
    {
        printf("请选择您的操作：\n");
        printf("I. 初始化栈\n");
        printf("K. 压栈\n");
        printf("S. 出栈\n");
        printf("R. 读栈顶元素\n");
        printf("D. 销毁栈\n");
        printf("E. 退出\n");

        scanf(" %c", &choice); // 加上空格忽略换行符

        switch (choice)
        {
        case 'I':
            printf("您选择了初始化栈操作。\n");
            init(&s);
            break;
        case 'K':
            printf("您选择了压栈操作。\n");
            printf("请输入你想入参的元素：\n");
            scanf(" %c", &data);
            push(&s, data);
            break;
        case 'R':
            printf("你选择了读栈顶元素\n");
            read(&s);
            break;
        case 'S':
            printf("你选择了出栈操作\n");
            read(&s);
            pop(&s);
            break;
        case 'O':
            printf("您选择了初始化共享栈操作。\n");
            initSharing(&ss);
            break;
        case 'E':
            printf("您确定要退出吗？按E键确认退出，按其他键返回上级菜单。\n");
            scanf(" %c", &exit_choice); // 加上空格忽略换行符
            if (exit_choice == 'E' || exit_choice == 'e')
            {
                printf("谢谢使用，再见！\n");
                return 0;
            }
            break;
        default:
            printf("无效的选择，请重新选择。\n");
            break;
        }
    }
}